﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;



namespace ControlesPadroes
{
    public partial class TextBoxMaskedPadrao : UserControl
    {

        #region atributos
        
        #endregion

        #region construtor
        public TextBoxMaskedPadrao()
        {
            InitializeComponent();

            TextBoxValorDigitado = false;

        }
        #endregion

        #region propriedades Label
        public string LabelTexto
        {
            get { return labelPadrao.Text; }
            set { labelPadrao.Text = value; }
        }
        #endregion


        #region propriedades TextBox

        public Size TextBoxTamanho
        {
            get { return maskedTextBoxPadrao.Size;}
            set { maskedTextBoxPadrao.Size = value; }
        }

        public Boolean TextBoxObrigarDigitacao { get; set; }

        public Object TextBoxValor
        {
            get { return maskedTextBoxPadrao.Value; }
            set { maskedTextBoxPadrao.Value = value; }
        }

        public Boolean TextBoxReadOnly
        {
            get { return maskedTextBoxPadrao.ReadOnly; }
            set { maskedTextBoxPadrao.ReadOnly = value; }            
        }

        public Boolean TextBoxValorDigitado { get; set; }
        

        public EnumControles TextBoxControle { get; set; }

        public void TextBoxSetError(string pMensagem)
        {
            errorProvider1.SetError(this,"Preenchimento obrigatório");
            
            maskedTextBoxPadrao.Focus();
        }

        public void TextBoxEmptySetError()
        {
            errorProvider1.Clear();            
        }

        public string TextBoxText
        {
            get { return maskedTextBoxPadrao.Text; }
            
        }

        public EnumControleCategoria TextBoxCategoria { get; set; }


        #endregion

  

        #region metodos privados


        private void TextBoxMaskedPadrao_Load(object sender, EventArgs e)
        {
            if (this.TextBoxObrigarDigitacao)
            {
                labelPadrao.ForeColor = System.Drawing.Color.Red;                
            }
            
           
            this.maskedTextBoxPadrao.InputMask = "";
            this.maskedTextBoxPadrao.NullText = "0";
            
            
            switch (TextBoxCategoria)
            {


                case EnumControleCategoria.NumeroMoeda:
                    this.maskedTextBoxPadrao.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.Currency;
                    this.maskedTextBoxPadrao.InputMask = "{currency:-9.2}";
                   // this.maskedTextBoxPadrao.Text = "R$ ";
                    break;

                case EnumControleCategoria.NumeroCientifico:
                    this.maskedTextBoxPadrao.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.Currency;
                    this.maskedTextBoxPadrao.InputMask = "{currency:-10.5}";                    
                    break;

                case EnumControleCategoria.NumeroInteiro:
                    this.maskedTextBoxPadrao.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.Integer;
                    this.maskedTextBoxPadrao.InputMask = "nnnnnnnnn";                    
                    break;

                case EnumControleCategoria.Texto:
                    this.maskedTextBoxPadrao.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.String;
                    this.maskedTextBoxPadrao.InputMask = ">&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>&";
                    this.maskedTextBoxPadrao.NullText = "";
                    break;

                case EnumControleCategoria.Data:
                    this.maskedTextBoxPadrao.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.Date;
                    this.maskedTextBoxPadrao.NullText = "" + System.DateTime.Now.Date;
                    break;

                case EnumControleCategoria.DataHora:
                    this.maskedTextBoxPadrao.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.DateTime;
                    this.maskedTextBoxPadrao.NullText = "" + System.DateTime.Now;
                    break;

                case EnumControleCategoria.Hora:
                    this.maskedTextBoxPadrao.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.Time;
                    this.maskedTextBoxPadrao.NullText = "" + System.DateTime.Now.Hour;
                    break;
            } 
        }


        public bool VerificarCampoVazio(object pValor, EnumControleCategoria pEnumControlaCategoria)
        {
            bool retorno = true;
            DateTime dataValor;
            Double numeroValor;
            float numeroMoeda;
            string textoValor;

            //limpa
            TextBoxEmptySetError();
            
            //verifica se o campo pode ser testado
            if (!(this.TextBoxObrigarDigitacao && this.Enabled))
            {
                retorno = false;
                return retorno;
            }
            
            //se tamanho for zero já cai fora
            if (this.TextBoxText.Length == 0)
                return retorno;
                
                
           //realiza demais teste
            switch (pEnumControlaCategoria)
            {
                case EnumControleCategoria.Data:
                    try
                    {
                        dataValor = (DateTime)pValor;
                        if (dataValor.Date.Year > 0) retorno = false;
                    }
                    catch { }
                    break;
                        
                case EnumControleCategoria.DataHora:
                    try
                    {
                        dataValor = (DateTime)pValor;
                        if (dataValor.Date.Year > 0) retorno = false;
                    }
                    catch { }
                    break;

                case EnumControleCategoria.Hora:
                    try
                    {
                        dataValor = (DateTime)pValor;
                        if (dataValor.Hour.ToString().Length > 0) retorno = false;
                    }
                    catch { }
                    break;

                case EnumControleCategoria.NumeroCientifico:
                    try
                    {
                        numeroValor = (double)pValor;
                        if (numeroValor > 0) retorno = false;
                    }
                    catch {}
                    break;

                case EnumControleCategoria.NumeroMoeda:
                    try
                    {
                        numeroMoeda = float.Parse(pValor.ToString());
                        if (numeroMoeda > 0) retorno = false;
                    }
                    catch { }
                    break;

                case EnumControleCategoria.NumeroInteiro:
                    try
                    {
                        numeroValor = (int)pValor;
                        if (numeroValor > 0) retorno = false;
                    }
                    catch { }
                    break;

                case EnumControleCategoria.Texto:
                    try
                    {
                        textoValor = (string)pValor;
                        if (textoValor.Trim().Length > 0) retorno = false;
                    }
                    catch { }
                    break;

                case EnumControleCategoria.TextoCaracter:
                    try
                    {
                        textoValor = (string)pValor;
                        if (textoValor.Trim().Length > 0) retorno = false;
                    }
                    catch { }
                    break;
            }

            return retorno;
        }
       


        #endregion

        private void maskedTextBoxPadrao_Validated(object sender, EventArgs e)
        {
            if (VerificarCampoVazio(this.maskedTextBoxPadrao.Value, TextBoxCategoria)) //se verdadeiro = não foi preechido
            {
                TextBoxSetError("Preenchimento obrigatório");
                maskedTextBoxPadrao.Focus();
            }
                    
        }   



    

      
    }
}
